/**
****************************(C) COPYRIGHT 2025 ROBOT-Z****************************
  * @file       INS_task.c/h
  * @brief      2025赛季哨兵欧拉角计算任务
  * @note
  * @history
  *  Version    Date            Author          Modification
  *  V1.0.0     Dec-26-2018     RM              1. 完成
  *  V2.0.0     Nov-11-2019     RM              1. 支持bmi088，但不支持mpu6500
  *  V3.0.0     Dev-20-2024     冉文治           1. 添加卡尔曼滤波对零漂进行处理
  *
  @verbatim
  ==============================================================================

  ==============================================================================
  @endverbatim
  ****************************(C) COPYRIGHT 2025 ROBOT-Z****************************
  */

#ifndef INS_Task_H
#define INS_Task_H

#include "main.h"
#include "stdint.h"

// 任务间隔
#define IMU_CONTROL_TIME_MS         	1

#define INS_YAW_ADDRESS_OFFSET      	0
#define INS_PITCH_ADDRESS_OFFSET    	2
#define INS_ROLL_ADDRESS_OFFSET     	1
#define INS_YAW_TOTAL_ADDRESS_OFFSET	3

#define INS_GYRO_X_ADDRESS_OFFSET   	0
#define INS_GYRO_Y_ADDRESS_OFFSET   	1
#define INS_GYRO_Z_ADDRESS_OFFSET   	2

#define INS_ACCEL_X_ADDRESS_OFFSET  	0
#define INS_ACCEL_Y_ADDRESS_OFFSET  	1
#define INS_ACCEL_Z_ADDRESS_OFFSET  	2

// BMI088控制温度的设置TIM的重载值，即给PWM最大为 BMI088_TEMP_PWM_MAX - 1
#define BMI088_TEMP_PWM_MAX 			  	5000

// 任务开始初期delay一段时间
#define INS_TASK_INIT_TIME          	7

// 温度控制PID
#define TEMPERATURE_PID_KP          	1600.0f
#define TEMPERATURE_PID_KI          	0.2f
#define TEMPERATURE_PID_KD          	0.0f
#define TEMPERATURE_PID_MAX_OUT     	9500.0f
#define TEMPERATURE_PID_MAX_IOUT    	9400.0f

/**
  * @brief          imu任务, 初始化 bmi088, 计算欧拉角
  * @author         冉文治
  * @param          pvParameters: NULL
  * @retval         none
  */
extern void INS_task(void const *pvParameters);

/**
  * @brief          获取四元数
  * @author         冉文治
  * @param          none
  * @retval         INS_quat的指针
  */
extern const fp32 *get_INS_quat_point(void);

/**
  * @brief          获取欧拉角, 0:yaw, 1:pitch, 2:roll 单位 rad
  * @author         冉文治
  * @param          none
  * @retval         INS_angle 的指针
  */
extern const fp32 *get_INS_angle_point(void);

/**
  * @brief          获取角速度,0:x轴, 1:y轴, 2:roll轴 单位 rad/s
  * @author         冉文治
  * @param          none
  * @retval         INS_gyro的指针
  */
extern const fp32 *get_gyro_data_point(void);

/**
  * @brief          获取加速度,0:x轴, 1:y轴, 2:roll轴 单位 m/s2
  * @author         冉文治
  * @param          none
  * @retval         INS_accel的指针
  */
extern const fp32 *get_accel_data_point(void);

#endif
